
Security News
The Changelog Podcast: Practical Steps to Stay Safe on npm
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.
postcss-logical
Advanced tools
PostCSS Logical Properties and Values lets you use logical, rather than physical, direction and dimension mappings in CSS, following the CSS Logical Properties and Values specification.
.banner {
color: #222222;
inset: logical 0 5px 10px;
padding-inline: 20px 40px;
resize: block;
transition: color 200ms;
}
/* becomes */
.banner {
color: #222222;
top: 0; left: 5px; bottom: 10px; right: 5px;
&:dir(ltr) {
padding-left: 20px; padding-right: 40px;
}
&:dir(rtl) {
padding-right: 20px; padding-left: 40px;
}
resize: vertical;
transition: color 200ms;
}
/* or, when used with { dir: 'ltr' } */
.banner {
color: #222222;
top: 0; left: 5px; bottom: 10px; right: 5px;
padding-left: 20px; padding-right: 40px;
resize: vertical;
transition: color 200ms;
}
/* or, when used with { preserve: true } */
.banner {
color: #222222;
top: 0; left: 5px; bottom: 10px; right: 5px;
&:dir(ltr) {
padding-left: 20px; padding-right: 40px;
}
&:dir(rtl) {
padding-right: 20px; padding-left: 40px;
}
inset: logical 0 5px 10px;
padding-inline: 20px 40px;
resize: block;
resize: vertical;
transition: color 200ms;
}
These shorthand properties set values for physical properties by default.
Specifying the logical keyboard at the beginning of the property value will
transform the flow-relative values afterward into both physical LTR and RTL
properties:
border, border-block, border-block-start, border-block-end,
border-inline, border-inline-start, border-inline-end, border-start,
border-end, border-color, border-block-color,
border-block-start-color, border-block-end-color, border-inline-color,
border-inline-start-color, border-inline-end-color, border-start-color,
border-end-color, border-style, border-block-style,
border-block-start-style, border-block-end-style, border-inline-style,
border-inline-start-style, border-inline-end-style, border-start-style,
border-end-style, border-width, border-block-width,
border-block-start-width, border-block-end-width, border-inline-width,
border-inline-start-width, border-inline-end-width, border-start-width,
border-end-widthinset, inset-block, inset-block-start, inset-block-end,
inset-inline, inset-inline-start, inset-inline-end, inset-start,
inset-endmargin, margin-block, margin-block-start, margin-block-end,
margin-inline, margin-inline-start, margin-inline-end, margin-start,
margin-endpadding, padding-block, padding-block-start, padding-block-end,
padding-inline, padding-inline-start, padding-inline-end,
padding-start, padding-endblock-size, inline-sizeclear: inline-start, clear: inline-end, float: inline-start,
float: inline-end, text-align: start, text-align: endBy default, PostCSS Logical Properties and Values creates fallback selectors
which require at least one [dir] attribute in your HTML. If you don’t have
any [dir] attributes, consider using the following JavaScript:
// force at least one dir attribute (this can run at any time)
document.documentElement.dir=document.documentElement.dir||'ltr';
Otherwise, consider using the dir option to transform all logical properties
and values to a specific direction.
require('postcss-logical')({
dir: 'ltr'
});
Add PostCSS Logical Properties and Values to your build tool:
npm install postcss-logical --save-dev
Use PostCSS Logical Properties and Values to process your CSS:
import postcssLogical from 'postcss-logical';
postcssLogical.process(YOUR_CSS);
Add PostCSS to your build tool:
npm install postcss --save-dev
Use PostCSS Logical Properties and Values as a plugin:
import postcss from 'gulp-postcss';
import postcssLogical from 'postcss-logical';
postcss([
postcssLogical(/* options */)
]).process(YOUR_CSS);
Add PostCSS Loader to your build tool:
npm install postcss-loader --save-dev
Use PostCSS Logical Properties and Values in your Webpack configuration:
import postcssLogical from 'postcss-logical';
export default {
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
{ loader: 'css-loader', options: { importLoaders: 1 } },
{ loader: 'postcss-loader', options: {
ident: 'postcss',
plugins: () => [
postcssLogical(/* options */)
]
} }
]
}
]
}
}
Add Gulp PostCSS to your build tool:
npm install gulp-postcss --save-dev
Use PostCSS Logical Properties and Values in your Gulpfile:
import postcss from 'gulp-postcss';
import postcssLogical from 'postcss-logical';
gulp.task('css', () => gulp.src('./src/*.css').pipe(
postcss([
postcssLogical(/* options */)
])
).pipe(
gulp.dest('.')
));
Add Grunt PostCSS to your build tool:
npm install grunt-postcss --save-dev
Use PostCSS Logical Properties and Values in your Gruntfile:
import postcssLogical from 'postcss-logical';
grunt.loadNpmTasks('grunt-postcss');
grunt.initConfig({
postcss: {
options: {
use: [
postcssLogical(/* options */)
]
},
dist: {
src: '*.css'
}
}
});
The dir option determines how directional fallbacks should be added to CSS.
By default, fallbacks replace the logical declaration with nested :dir
pseudo-classes. If dir is defined as ltr or rtl then only the left or
right directional fallbacks will replace the logical declarations. If
preserve is defined as true, then the dir option will be ignored.
The preserve option determines whether directional fallbacks should be added
before logical declarations without replacing them. By default, directional
fallbacks replace logical declaration. If preserve is defined as true, then
the dir option will be ignored.
This package also facilitates writing directional CSS by providing a way to define styles for different directions using :dir() pseudo-class. It is similar to postcss-logical but focuses more on pseudo-classes rather than property conversions.
RTL CSS is a framework for transforming LTR CSS to RTL. It's more comprehensive than postcss-logical as it includes a wider range of transformations and configurations, making it suitable for complex RTL adaptations.
FAQs
Use logical properties and values in CSS
The npm package postcss-logical receives a total of 4,833,491 weekly downloads. As such, postcss-logical popularity was classified as popular.
We found that postcss-logical demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.

Security News
Experts push back on new claims about AI-driven ransomware, warning that hype and sponsored research are distorting how the threat is understood.

Security News
Ruby's creator Matz assumes control of RubyGems and Bundler repositories while former maintainers agree to step back and transfer all rights to end the dispute.